/**
 * 用户相关API接口
 */
import http from '../utils/http.js';
import { encryptPassword } from '../utils/crypto.js';

// API路径常量
const API_PATHS = {
	SIMPLE_LOGIN: '/jsonrest/mobile/user/User/0/simpleLogin',
	SEND_CODE: '/jsonrest/mobile/user/User/0/sendCode',
	UPDATE_PASSWORD: '/jsonrest/mobile/user/User/0/updatePassword',
	REGISTER: '/jsonrest/mobile/user/User/0/register'
};

/**
 * 用户API类
 */
class UserApi {
	/**
	 * 简单登录
	 * @param {String} loginName 用户名
	 * @param {String} password 密码（明文，会自动Base64加密）
	 * @param {Number} appType 应用类型，默认4
	 */
	static async simpleLogin(loginName, password, appType = 4) {
		// 对密码进行Base64加密
		const encryptedPassword = encryptPassword(password);
		
		return await http.post(API_PATHS.SIMPLE_LOGIN, {
			loginName,
			password: encryptedPassword,
			appType
		});
	}
	
	/**
	 * 发送动态验证码
	 * @param {String} loginName 用户名
	 * @param {Number} appType 应用类型，默认4
	 */
	static async sendCode(loginName, appType = 4) {
		return await http.post(API_PATHS.SEND_CODE, {
			loginName,
			appType
		});
	}
	
	/**
	 * 修改密码
	 * @param {String} password 旧密码（明文，会自动Base64加密）
	 * @param {String} newPassword 新密码（明文，会自动Base64加密）
	 */
	static async updatePassword(password, newPassword) {
		// 对密码进行Base64加密
		const encryptedOldPassword = encryptPassword(password);
		const encryptedNewPassword = encryptPassword(newPassword);
		
		return await http.post(API_PATHS.UPDATE_PASSWORD, {
			password: encryptedOldPassword,
			newPassword: encryptedNewPassword
		});
	}
	
	/**
	 * 用户注册
	 * @param {Object} userData 注册数据
	 * @param {String} userData.username 用户名
	 * @param {String} userData.password 密码（明文，会自动Base64加密）
	 * @param {String} userData.inviteCode 邀请码
	 */
	static async register(userData) {
		// 对密码进行Base64加密
		const encryptedData = {
			...userData,
			password: encryptPassword(userData.password || ''),
			appType: 4
		};
		
		return await http.post(API_PATHS.REGISTER, encryptedData);
	}
}

// 导出API方法（支持两种导入方式）
export default UserApi;

// 也支持解构导入
export const {
	simpleLogin,
	sendCode,
	updatePassword,
	register
} = UserApi;
